package com.coincalf.wallet.service;

import com.baomidou.mybatisplus.plugins.Page;
import com.coincalf.framework.dto.CoinRechargeDTO;
import com.coincalf.framework.http.Response;
import com.coincalf.wallet.entity.CoinRecharge;
import com.baomidou.mybatisplus.service.IService;

import java.util.List;

/**
 * <p>
 * 用户充值,当前用户充值成功之后添加数据到这个表,充值一般无手续费.当status为1的时候表示充值成功 服务类
 * </p>
 *
 * @author crow
 * @since 2018-05-16
 */
public interface CoinRechargeService extends IService<CoinRecharge> {

    /**
     * 获取充值记录集合
     *
     * @param page         分页参数
     * @param agencyUserId 代理人用户ID
     * @param userName     用户名
     * @param orderId      订单号
     * @param status       状态
     * @param coinId       币种ID
     * @param parentId     上级ID
     * @param createTime   创建时间
     * @return
     */
    Page<CoinRecharge> selectRecharges(
            Page<CoinRecharge> page,
            long agencyUserId,
            String userName,
            long orderId,
            Integer status,
            long coinId,
            long parentId,
            String createTime
    );

    /**
     * 获取充值记录统计
     *
     * @param agencyUserId 代理用户ID
     * @return
     */
    Response selectRechargesTotal(long agencyUserId);

    /**
     * 查询待入账的充值记录
     *
     * @return
     */
    List<CoinRechargeDTO> queryPendingRecord();

    /**
     * 修改充值记录状态
     *
     * @param id        充值记录主键
     * @param status    状态
     * @param collected 归集
     * @return
     */
    boolean modifyRechargeStatus(Long id, Integer status, Integer collected);

    /**
     * 通过币种id 交易id 收款地址查询充币纪录
     *
     * @param coinId
     * @param txId
     * @param toAddress
     * @return
     */
    CoinRecharge selectOneByCoinIdAndTxIdAndToAddress(
            Long coinId,
            String txId,
            String toAddress
    );

    public List<CoinRecharge> findAllByAndCoinNameAndTxStatusAndCollected(String coinName, Integer txStatus, Integer collected);

    public List<CoinRecharge> findAllByCoinNameAndTxStatusAndCollectedAndToAddress(String coinName, Integer txStatus, Integer collected, String toAddress);

    public int updateTxStatus(Long id, Integer txStatus);

}
